/**
 * 数组扁平化
 * @param {Array} arr
 *
 * 写递归的技巧
 * 1、确定入参、出参、入参类型、出参类型
 * 2、确定过程和终止条件
 * 3、是否需要返回或者对栈参数进行重置
 */
export function flatten1(arr) {
  return arr.reduce((accu, item) => {
    if (Array.isArray(item)) {
      return accu.concat(flatten1(item))
    } else {
      return accu.concat(item)
    }
  }, [])
}

/**
 * 不使用递归来进行数组扁平化
 * @param {Array} arr
 */
export function flatten2(arr) {
  let tArr = [].concat(...arr)

  while (tArr.some((item) => Array.isArray(item))) {
    tArr = [].concat(...tArr)
  }

  return tArr
}
